package com.mxs.qrcode.utils.alisms;

import com.aliyun.dysmsapi20170525.Client;
import com.aliyun.dysmsapi20170525.models.AddSmsSignRequest;
import com.aliyun.dysmsapi20170525.models.AddSmsSignResponse;
import com.aliyun.dysmsapi20170525.models.AddSmsSignResponseBody;
import com.google.gson.Gson;

import javax.xml.bind.DatatypeConverter;
import java.util.ArrayList;
import java.util.List;

public class AliSmsSign {

    /**
     * 调用短信AddSmsSign申请短信签名。
     * @param client
     * @param signName 签名名称 签名必须符合个人用户签名规范或企业用户签名规范。
     * @param signSource 签名来源。取值：
     *
     * 0：企事业单位的全称或简称。
     * 1：工信部备案网站的全称或简称。
     * 2：App应用的全称或简称。
     * 3：公众号或小程序的全称或简称。
     * 4：电商平台店铺名的全称或简称。
     * 5：商标名的全称或简称。
     * @param remark 短信签名申请说明。请在申请说明中详细描述您的业务使用场景，申请工信部备案网站的全称或简称请在此处填写域名，长度不超过200个字符。
     * @param signFileList
     *
     * 签名的证明文件格式，支持上传多张图片。当前支持JPG、PNG、GIF或JPEG格式的图片。
     * 个别场景下，申请签名需要上传证明文件。详细说明请参见个人用户签名规范和企业用户签名规范。
     * 签名的资质证明文件经base64编码后的字符串。图片不超过2 MB。
     * 个别场景下，申请签名需要上传证明文件。详细说明请参见个人用户签名规范和企业用户签名规范。
     *
     * @return
     * @throws Exception
     */
    public boolean apply(Client client, String signName, Integer signSource, String remark, List<byte[]>... signFileList) throws Exception {

        if(signFileList==null){
            throw new Exception("缺失 签名的资质证明文件 和 签名的证明文件！");
        }

        List<AddSmsSignRequest.AddSmsSignRequestSignFileList> addSmsSignRequestSignFileList = new ArrayList<>();
        for(List<byte[]> files:signFileList){
            if(files.size()<2){
                throw new Exception("签名的资质证明文件和签名的证明文件不全！");
            }
            AddSmsSignRequest.AddSmsSignRequestSignFileList signFileList0 = new AddSmsSignRequest.AddSmsSignRequestSignFileList()
                    .setFileContents(DatatypeConverter.printBase64Binary(files.get(0)))
                    .setFileSuffix(DatatypeConverter.printBase64Binary(files.get(1)));
            addSmsSignRequestSignFileList.add(signFileList0);
        }
        AddSmsSignRequest addSmsSignRequest = new AddSmsSignRequest()
                .setSignName(signName)
                .setSignSource(signSource)
                .setRemark(remark)
                .setSignFileList(addSmsSignRequestSignFileList);
        AddSmsSignResponse response = client.addSmsSign(addSmsSignRequest);
        AddSmsSignResponseBody body = response.getBody();
        Gson gson = new Gson();
        String jsonStr = gson.toJson(body);
        if(AliSmsCode.OK_CODE.equals(body.getCode())){
            return true;
        }else{
            throw new Exception(jsonStr);
        }

    }



}
